package com.ruoyi.system.service.impl;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ruoyi.system.domain.ModuleFileInfo;
import com.ruoyi.system.domain.ModuleVolumeInfo;
import com.ruoyi.system.domain.ModuleVolumeInfoPreview;
import com.ruoyi.system.mapper.ModuleVolumeInfoMapper;
import com.ruoyi.system.mapper.ModuleVolumeInfoPreviewMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.ModuleFileInfoPreviewMapper;
import com.ruoyi.system.domain.ModuleFileInfoPreview;
import com.ruoyi.system.service.IModuleFileInfoPreviewService;

/**
 * 文件导入预览Service业务层处理
 *
 * @author ruoyi
 * @date 2023-08-01
 */
@Service
public class ModuleFileInfoPreviewServiceImpl implements IModuleFileInfoPreviewService
{
    @Autowired
    private ModuleFileInfoPreviewMapper moduleFileInfoPreviewMapper;
    @Autowired
    private ModuleVolumeInfoPreviewMapper moduleVolumeInfoPreviewMapper;

    /**
     * 查询文件导入预览
     *
     * @param id 文件导入预览主键
     * @return 文件导入预览
     */
    @Override
    public ModuleFileInfoPreview selectModuleFileInfoPreviewById(String id)
    {
        return moduleFileInfoPreviewMapper.selectModuleFileInfoPreviewById(id);
    }

    /**
     * 查询文件导入预览列表
     *
     * @param moduleFileInfoPreview 文件导入预览
     * @return 文件导入预览
     */
    @Override
    public List<ModuleFileInfoPreview> selectModuleFileInfoPreviewList(ModuleFileInfoPreview moduleFileInfoPreview)
    {
        return moduleFileInfoPreviewMapper.selectModuleFileInfoPreviewList(moduleFileInfoPreview);
    }

    /**
     * 新增文件导入预览
     *
     * @param moduleFileInfoPreview 文件导入预览
     * @return 结果
     */
    @Override
    public int insertModuleFileInfoPreview(ModuleFileInfoPreview moduleFileInfoPreview)
    {
        return moduleFileInfoPreviewMapper.insertModuleFileInfoPreview(moduleFileInfoPreview);
    }

    /**
     * 修改文件导入预览
     *
     * @param moduleFileInfoPreview 文件导入预览
     * @return 结果
     */
    @Override
    public int updateModuleFileInfoPreview(ModuleFileInfoPreview moduleFileInfoPreview)
    {
        return moduleFileInfoPreviewMapper.updateModuleFileInfoPreview(moduleFileInfoPreview);
    }

    /**
     * 批量删除文件导入预览
     *
     * @param ids 需要删除的文件导入预览主键
     * @return 结果
     */
    @Override
    public int deleteModuleFileInfoPreviewByIds(String[] ids)
    {
        return moduleFileInfoPreviewMapper.deleteModuleFileInfoPreviewByIds(ids);
    }

    /**
     * 删除文件导入预览信息
     *
     * @param id 文件导入预览主键
     * @return 结果
     */
    @Override
    public int deleteModuleFileInfoPreviewById(String id)
    {
        return moduleFileInfoPreviewMapper.deleteModuleFileInfoPreviewById(id);
    }

    /**
     * 获取二进制文件
     *
     * @param id 文件信息主键
     * @return 二进制文件
     */
    public ResponseEntity<byte[]> getLocalFile(String id){
        try {
            ModuleFileInfoPreview moduleFileInfoPreview = moduleFileInfoPreviewMapper.selectModuleFileInfoPreviewById(id);
            File localFile = new File(moduleFileInfoPreview.getFilepath());
            if(moduleFileInfoPreview.getFilepath() != null){
                localFile = new File(moduleFileInfoPreview.getFilepath());
            }else if(moduleFileInfoPreview.getVolumeid() != null){
                ModuleVolumeInfoPreview moduleVolumeInfoPreview = moduleVolumeInfoPreviewMapper.selectModuleVolumeInfoPreviewById(moduleFileInfoPreview.getVolumeid());
                //插入文件类型
                String folderPath = moduleVolumeInfoPreview.getPath() + File.separator;
                String houzhui = "jpg";
                File folder = new File(folderPath);
                if(folder.isDirectory()){
                    Map<String,String> fileDetails = new HashMap<>();
                    readFiles(folder,fileDetails);
                    houzhui = fileDetails.get(moduleFileInfoPreview.getFilename());
                }
                localFile = new File(moduleVolumeInfoPreview.getPath() + File.separator + moduleFileInfoPreview.getFilename() + "." + houzhui);
            }


//            File pdfFile = new File("F:/importEngine\\56#\\工程准备阶段文件（A类）\\0010.pdf");
            byte[] localBytes = Files.readAllBytes(localFile.toPath());
            return ResponseEntity.ok().header("Content-Type", "application/pdf").body(localBytes);
        }catch (IOException e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().build();
        }
    }

    //读取文件名称与类型
    public static void readFiles(File folder, Map<String, String> fileDetails) {
        File[] files = folder.listFiles(); // 获取文件夹中的所有文件

        for (File file : files) {
            if (file.isDirectory()) {
                readFiles(file, fileDetails); // 递归遍历子文件夹中的文件
            } else {
                String fileName = file.getName();
                String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
                String nameWithoutExtension = fileName.substring(0, fileName.lastIndexOf("."));

                fileDetails.put(nameWithoutExtension, fileType); // 将不带类型的文件名称和类型存储到字典中
            }
        }
    }

    /**
     * 获取Type
     *
     * @param id 文件信息主键
     * @return type
     */
    public String getFileType(String id){
        ModuleFileInfoPreview moduleFileInfoPreview = moduleFileInfoPreviewMapper.selectModuleFileInfoPreviewById(id);

        ModuleVolumeInfoPreview moduleVolumeInfoPreview = moduleVolumeInfoPreviewMapper.selectModuleVolumeInfoPreviewById(moduleFileInfoPreview.getVolumeid());
        String folderPath = moduleVolumeInfoPreview.getPath() + File.separator;
        String houzhui = "pdf";
        File folder = new File(folderPath);
        if(folder.isDirectory()){
            Map<String,String> fileDetails = new HashMap<>();
            readFiles(folder,fileDetails);
            houzhui = fileDetails.get(moduleFileInfoPreview.getFilename());
        }
        return houzhui;
    }


}
